| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import { useParams } from 'common'
- import { useEffect } from 'react'
- import { TableGridEditor } from '@/components/interfaces/TableGridEditor/TableGridEditor'
- import { DefaultLayout } from '@/components/layouts/DefaultLayout'
- import { EditorBaseLayout } from '@/components/layouts/editors/EditorBaseLayout'
- import { TableEditorLayout } from '@/components/layouts/TableEditorLayout/TableEditorLayout'
- import { TableEditorMenu } from '@/components/layouts/TableEditorLayout/TableEditorMenu'
- import { useTableEditorQuery } from '@/data/table-editor/table-editor-query'
- import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
- import { createTabId, useTabsStateSnapshot } from '@/state/tabs'
- import type { NextPageWithLayout } from '@/types'
- const TableEditorPage: NextPageWithLayout = () => {
- const { id: _id, ref: projectRef } = useParams()
- const id = _id ? Number(_id) : undefined
- const store = useTabsStateSnapshot()
- const { data: project } = useSelectedProjectQuery()
- const { data: selectedTable, isPending: isLoading } = useTableEditorQuery({
- projectRef: project?.ref,
- connectionString: project?.connectionString,
- id,
- })
- /**
- * Effect: Creates or updates tab when table is loaded
- * Runs when:
- * - selectedTable changes (when a new table is loaded)
- * - id changes (when URL parameter changes)
- */
- useEffect(() => {
- if (selectedTable && projectRef) {
- const tabId = createTabId(selectedTable.entity_type, { id: selectedTable.id })
- if (!store.tabsMap[tabId]) {
- store.addTab({
- id: tabId,
- type: selectedTable.entity_type,
- label: selectedTable.name,
- metadata: {
- schema: selectedTable.schema,
- name: selectedTable.name,
- tableId: id,
- },
- })
- } else {
- // If tab already exists, just make it active
- store.makeTabActive(tabId)
- }
- }
- }, [selectedTable, id, projectRef])
- return <TableGridEditor isLoadingSelectedTable={isLoading} selectedTable={selectedTable} />
- }
- TableEditorPage.getLayout = (page) => (
- <DefaultLayout>
- <EditorBaseLayout
- productMenu={<TableEditorMenu />}
- product="Table Editor"
- productMenuClassName="overflow-y-hidden"
- >
- <TableEditorLayout>{page}</TableEditorLayout>
- </EditorBaseLayout>
- </DefaultLayout>
- )
- export default TableEditorPage
|